//package org.ejb.stateless;
//
//
//import javax.annotation.PostConstruct;
//import javax.annotation.PreDestroy;
//import javax.annotation.Resource;
//import javax.ejb.EJBException;
//import javax.ejb.Stateless;
//import javax.ejb.TransactionAttribute;
//import javax.ejb.TransactionAttributeType;
//import javax.jms.*;
//import javax.persistence.EntityManager;
//import javax.persistence.PersistenceContext;
//import javax.persistence.Query;
//
//import org.ejb.api.IOrderRemote;
//import org.ejb.entities.Address;
//import org.ejb.entities.CartItem;
//import org.ejb.entities.CreditCard;
//import org.ejb.entities.Order;
//import org.ejb.entities.OrderLine;
//import org.ejb.entities.Utilisateur;
//import org.ejb.entities.ValidationException;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.logging.Logger;
//
///**
// * This class is a facade for all order services.
// */
//@SuppressWarnings(value = "unchecked")
//@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
//@Stateless(mappedName = "org.ejb.stateless.OrderStateless@Remote", description = "Order stateless", name = "OrderStateless")
//public class OrderStateless implements IOrderRemote/*, OrderLocal*/ {
//
//    // ======================================
//    // =             Attributs              =
//    // ======================================
//    @PersistenceContext
//    private EntityManager em;
//
//    @Resource
//    private ConnectionFactory connectionFactory;
//   // @Resource
//    //private Topic destinationOrder;
//    private Connection connection;
//
//    //@WebServiceRef(wsdlLocation = "http://localhost:8080/petex/DeliveryService?WSDL")
//   // private DeliveryService deliveryService;
//
//
//    private final String cname = this.getClass().getName();
//    private Logger logger = Logger.getLogger("org.ejb.stateless");
//
//    // ======================================
//    // =     Methodes Lifecycle Callback    =
//    // ======================================
//    @PostConstruct
//    public void openConnection() {
//        try {
//            connection = connectionFactory.createConnection();
//        } catch (JMSException e) {
//            logger.throwing(cname, "openConnection", e);
//            throw new EJBException(e);
//        }
//    }
//
//    @PreDestroy
//    public void closeConnection() {
//        if (connection != null) {
//            try {
//                connection.close();
//            } catch (JMSException e) {
//                logger.throwing(cname, "closeConnection", e);
//                throw new EJBException(e);
//            }
//        }
//    }
//
//    // ======================================
//    // =          Methodes publiques        =
//    // ======================================
//    public Order createOrder(final Utilisateur customer, final Address deliveryAddress, final CreditCard creditCard, final List<CartItem> cartItems) {
//        final String mname = "createOrder";
//        logger.entering(cname, mname, cartItems.size());
//
//        // On s'assure de la validite des parametres
//        if (cartItems == null || cartItems.size() == 0)
//            throw new ValidationException("Shopping cart is empty");
//
//        // Creation du bon de commande
//        Order order = new Order(customer, em.merge(deliveryAddress), creditCard);
//
//        // A partir du panier electronique on cree les lignes du bon de commande
//        List<OrderLine> orderLines = new ArrayList<OrderLine>();
//
//        for (CartItem cartItem : cartItems) {
//            orderLines.add(new OrderLine(cartItem.getQuantity(), cartItem.getItem()));
//        }
//        order.setOrderLines(orderLines);
//
//        // L'objet est persiste en base de donnees
//        em.persist(order);
//
//        //publishOrder(order);
//        //notifyTransporter(order);
//
//        logger.exiting(cname, mname, order);
//        return order;
//    }
//
//    public Order findOrder(final Long orderId) {
//        final String mname = "findOrder";
//        logger.entering(cname, mname, orderId);
//
//        // On s'assure de la validit� des param�tres
//        if (orderId == null)
//            throw new ValidationException("Invalid id");
//
//        Order order;
//
//        // On recherche l'objet a partir de son identifiant
//        order = em.find(Order.class, orderId);
//
//        logger.exiting(cname, mname, order);
//        return order;
//    }
//
//    public void deleteOrder(final Order order) {
//        final String mname = "deleteOrder";
//        logger.entering(cname, mname, order);
//
//        // On s'assure de la validite des parametres
//        if (order == null)
//            throw new ValidationException("Order object is null");
//
//        // On supprime l'objet de la base de donnees
//        em.remove(em.merge(order));
//
//        logger.exiting(cname, mname);
//    }
//
//    public List<Order> findOrders() {
//        final String mname = "findOrders";
//        logger.entering(cname, mname);
//
//        Query query;
//        List<Order> orders;
//
//        // On modifie l'objet de la base de donnees
//        query = em.createQuery("SELECT o FROM Order o");
//        orders = query.getResultList();
//
//        logger.exiting(cname, mname, orders.size());
//        return orders;
//    }
//    
//    public List<Order> findOrders(Utilisateur user) {
//        final String mname = "findOrders";
//        logger.entering(cname, mname);
//
//        Query query;
//        List<Order> orders;
//
//        // On modifie l'objet de la base de donnees
//        query = em.createQuery("SELECT o FROM Order o where o.customer=user");
//        orders = query.getResultList();
//
//        logger.exiting(cname, mname, orders.size());
//        return orders;
//    }
//    
//
//    // ======================================
//    // =           Methodes Priv�es         =
//    // ======================================
//
//   
//
//    
//}
